package com.bt.springboot.common.result;

import com.bt.springboot.common.enums.ResultEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

/**
 * @author zkx
 * @Date 2022/8/9 11:30
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Result<T> implements Serializable {

	private static final long serialVersionUID = 1L;
	/**
	 * 返回状态码
	 */
	private Integer code;

	/**
	 * 提示信息
	 */
	private String msg;
	/**
	 * 返回数据
	 */
	private T data;

	/**
	 * 成功操作
	 */
	public static <T> Result<T> success() {
		return success(null);
	}

	/**
	 * 成功操作，携带数据
	 */
	public static <T> Result<T> success(T data) {
		return success(ResultEnum.RC100.getMsg(), data);
	}

	/**
	 * 成功操作，携带消息
	 */
	public static <T> Result<T> success(String msg) {
		return success(msg, null);
	}


	/**
	 * 成功操作，携带消息和数据
	 */
	public static <T> Result<T> success(String msg, T data) {
		return success(ResultEnum.RC100.getCode(), msg, data);
	}

	/**
	 * 成功操作，携带状态码和消息
	 */
	public static <T> Result<T> success(Integer code, String msg) {
		return success(code, msg, null);
	}

	public static <T> Result<T> success(Integer code, String msg, T data) {
		return new Result<>(code, msg, data);
	}

	/**
	 * 失败操作
	 */
	public static <T> Result<T> failure() {
		return failure(ResultEnum.RC999.getMsg());
	}

	/**
	 * 失败操作，携带自定义消息
	 */
	public static <T> Result<T> failure(String msg) {
		return failure(msg, null);
	}

	/**
	 * 失败操作，携带自定义消息和数据
	 */
	public static <T> Result<T> failure(String msg, T data) {
		return failure(ResultEnum.RC999.getCode(), msg, data);
	}

	/**
	 * 失败操作，携带自定义状态码和自定义消息
	 */
	public static <T> Result<T> failure(Integer code, String msg) {
		return failure(code, msg, null);
	}

	/**
	 * 失败操作，携带自定义状态码、自定义消息和数据
	 */
	public static <T> Result<T> failure(Integer code, String msg, T data) {
		return new Result<>(code,msg,data);
	}
}
